package gov.pr.celepar.sentinela.admin.action.consultas;

import gov.pr.celepar.framework.util.Pagina;
import gov.pr.celepar.sentinela.admin.action.BaseAction;
import gov.pr.celepar.sentinela.admin.dao.FuncaoDAO;
import gov.pr.celepar.sentinela.admin.dao.factory.DAOFactoryServer;
import gov.pr.celepar.sentinela.admin.excecao.SentinelaServerException;
import gov.pr.celepar.sentinela.admin.form.consultas.GruposFuncaoReportForm;
import gov.pr.celepar.sentinela.admin.pojo.Funcao;
import gov.pr.celepar.sentinela.admin.pojo.Grupo;

import java.util.Collection;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class GruposFuncaoReportAction extends BaseAction {

	public String executar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		GruposFuncaoReportForm gfrForm = (GruposFuncaoReportForm) form;

		this.listarSistemasAutorizados(request);// aqui populou a lista
		// (comboBox no caso do
		// referente JSP) Sistema, pois
		// deu um setAttribute na sessão

		Collection<Funcao> arvore = null;
		Collection<Grupo> listaGrupos = null;

		// **** PREENCHE A PAGINA DE DADOS E REPASSA PARA O JSP TRATAR ISSO
		// **********************************************************************
		if (gfrForm.getCodSistema() != null
				&& !gfrForm.getCodSistema().equals("")) {

			DAOFactoryServer daoFactory = DAOFactoryServer.getDAOFactory();
			FuncaoDAO funcaoDAO = daoFactory.getFuncaoDAO();
			arvore = funcaoDAO.getArvore(Long.decode(gfrForm.getCodSistema()));

			request.setAttribute("listaFuncoes", arvore);
			if (gfrForm.getCodFuncao() != null
					&& !gfrForm.getCodFuncao().trim().equals("")) {
				listaGrupos = funcaoDAO.listarGruposByFuncao(Long
						.decode(gfrForm.getCodSistema()), Long.decode(gfrForm
						.getCodFuncao()));

				Integer indicePagina = new Integer("1");
				Integer totalRegistros = null;
				if (listaGrupos != null && !listaGrupos.isEmpty()) {
					totalRegistros = new Integer(listaGrupos.size());
					Pagina pagina = new Pagina(totalRegistros, indicePagina,
							totalRegistros);
					pagina.setRegistros(listaGrupos);
					request.setAttribute("pagina", pagina);
				} else {
					throw new SentinelaServerException(
							"Nenhum registro encontrado! ");
				}
				request.setAttribute("listaGrupos", listaGrupos);
			}
		}

		return "grupos_de_uma_funcao";// esse retorno vai para o findFoward()
		// da classe mãe
	}
}
